#pragma once

#include "Includes.h"
#include "VMTWrapper.h"
#include "Utilities.h"

class IVEngineClient
{
public:
	virtual void f0000();
	virtual void f0001();
	virtual void f0002();
	virtual void f0003();
	virtual void f0004();
	virtual void GetScreenSize(int* width, int* height);
	virtual void ServerCmd( const char *szCmdString, bool bReliable = true );
	virtual void ClientCmd( const char *szCmdString );
	virtual bool GetPlayerInfo( int ent_num, player_info_t *pinfo );
	virtual int  GetPlayerForUserID( int userID ) = 0;
	virtual void f0010();
	virtual void f0011();
	virtual int GetLocalPlayer();
	virtual void f0013();
	virtual void f0014();
	virtual void f0015();
	virtual void f0016();
	virtual void f0017();
	virtual void f0018();
	virtual void GetViewAngles(SD_Tools::Angle* va);
	virtual void SetViewAngles(SD_Tools::Angle& va);
	virtual int GetMaxClients();
	virtual void f0022();
	virtual void f0023();
	virtual void f0024();
	virtual void f0025();
	virtual bool IsInGame();
	virtual bool IsConnected();
	virtual void f0028();
	virtual void f0029();
	virtual void f0030();
	virtual void f0031();
	virtual void f0032();
	virtual void f0033();
	virtual void f0034();
	virtual void f0035();
	virtual VMatrix* WorldToScreenMatrix();
	void ClientCmd_Unrestricted(const char* szCommandString)
	{
		typedef void (__thiscall* ClientCmd_Unrestricted_t)(void*, const char* szCommandString);
		return VMTWrapper::getfunction<ClientCmd_Unrestricted_t>(this, ENGINE_CLIENTCMD_UNRESTRICTED)(this, szCommandString);
	}
};